/**
 *  call();
 *  apply();
 *  call();和apply();都是函数对象的方法，需要通过函数对象来调用
 *  当函数调用call()和apply()都会调用函数执行，不同的是：
 *      在调用call()和apply()可以将一个对象指定为第一个参数, 此时这个对象将会成为函数执行时的this
 *
 *  call()方法可以在参数之后依次传递
 *  apply()方法需要将实参封装到一个数组中统一传递
 *
 *
 *  this的情况：
 *      1. 以函数形式调用时，this永远都是window
 *      2. 以方法的形式调用时，this是调用方法的对象
 *      3. 以构造函数的形式调用时，this是新创建的那个对象
 *      4. 使用call()和apply()调用时，this是我们指定的对象
 *
 * */


/**
 *
 * fun函数对象
 * fun()函数返回值
 * */
function fun() {
    console.log("Hello World");

}
fun.call();
fun.apply();
fun(); // 这种方式this永远是window


var obj = {name:"孙悟空"};
function fun2() {
    console.log(this.name);
}
/**这种方式传入的对象是谁，this就指向了谁*/
fun2.call(obj);
fun2.apply(obj);